package com.agritech.state;

import com.agritech.machine.AgriculturalMachineContext;

/**
 * 工作状态类
 * 状态模式的具体状态实现
 */
public class WorkingState implements MachineState {
    @Override
    public void start(AgriculturalMachineContext context) {
        System.out.println("农机 " + context.getMachine().getId() + " 已经在工作状态");
    }

    @Override
    public void stop(AgriculturalMachineContext context) {
        System.out.println("农机 " + context.getMachine().getId() + " 停止工作，转换到空闲状态");
        context.getMachine().setRunning(false); // 实际停止农机
        context.setState(new IdleState());
    }

    @Override
    public void performTask(AgriculturalMachineContext context, String taskDetails) {
        if (context.getMachine().getFuelLevel() < 10) {
            System.out.println("农机 " + context.getMachine().getId() + " 燃油不足，无法执行任务 '" + taskDetails + "'");
            System.out.println("农机 " + context.getMachine().getId() + " 自动转换为故障状态");
            context.setState(new BrokenState("燃油耗尽"));
            return;
        }
        System.out.println("农机 " + context.getMachine().getId() + " 正在执行任务: " + taskDetails);
        context.getMachine().consumeFuel(5.0); // 模拟消耗燃油
        // 任务执行完毕后可以转换回空闲状态，或根据业务逻辑保持工作状态
        // context.setState(new IdleState()); 
    }

    @Override
    public void repair(AgriculturalMachineContext context) {
        System.out.println("农机 " + context.getMachine().getId() + " 正在工作中，无法直接进入维修状态，请先停止");
    }
    
    @Override
    public String getStateName() {
        return "工作中";
    }
}